/**
 * 
 */
package com.itboye.allshengmedical.sci.cmd.req;

import java.util.Locale;

/**
 * 命令类型
 * 
 * @author 贝贝 346551990@qq.com
 * @date 2016-12-8
 */

// 发 起：5A A5 数据长度：0x04 数据：1F 00 00 00 校验 01 02 结束：3E E3

public enum CmdType {
	SelfCheck("F01", 0x01), // 自检指令
	SetTemp("F02", 0x02), // 设置目标温度命令
	StopCtrlTemp("F03", 0x03), // 停止控温命令
	GetTemp("F04", 0x04), // 获取温度命令
	EnterVerifyTemp("F05", 0x05), // 进入校验状态命令
	VerifyTemp("F06", 0x06), // 校温功能命令
	DetectLightIntensitTemp("F07", 0x07), // 检测光强命令
	LightJustTemp("F08", 0x08), // 亮度调节命令
	OpenLight("F09", 0x09), // 开灯命令
	CloseLight("F0A", 0x0A), // 关灯命令
	UpdateArm("F0B", 0x0B), // 单片机程序更新开始
	Version("F0C", 0x0C), // 获取版本指令
	FinishExpriment("F0D", 0x0D), // 完成实验
	AreaCalibration("F0E", 0x0E), // 位置校准
	EndAreaCalibration("F0F", 0x0F), // 退出位置校准
	RunCmd("F10", 0x10), // 进入运行/溶解度命令
	Unknown("F--", 0x00);// 未知指令

	/**
	 * 根据int获得CmdType
	 * 
	 * @param hex
	 * @return
	 */
	public static CmdType getCmdType(int cmd) {

		switch (cmd) {
		case 0x01:
			return CmdType.SelfCheck;
		case 0x02:
			return CmdType.SetTemp;
		case 0x03:
			return CmdType.StopCtrlTemp;
		case 0x04:
			return CmdType.GetTemp;
		case 0x05:
			return CmdType.EnterVerifyTemp;
		case 0x06:
			return CmdType.VerifyTemp;
		case 0x07:
			return CmdType.DetectLightIntensitTemp;
		case 0x08:
			return CmdType.LightJustTemp;
		case 0x09:
			return CmdType.OpenLight;
		case 0x0A:
			return CmdType.CloseLight;
		case 0x0B:
			return CmdType.UpdateArm;
			// case 0xB2:
			// return CmdType.EndUpdateArm;
		case 0x0C:
			return CmdType.Version;
		case 0x0D:
			return CmdType.FinishExpriment;
		case 0x0E:
			return CmdType.AreaCalibration;
		case 0x0F:
			return CmdType.EndAreaCalibration;
		case 0x10:
			return CmdType.RunCmd;
		default:
			return CmdType.Unknown;
		}
	}

	/**
	 * 根据十六进制字符串获得CmdType
	 * 
	 * @param hex
	 * @return
	 */
	public static CmdType getCmdType(String hex) {
		int cmd = Integer.parseInt(hex, 16);
		return getCmdType(cmd);
	}

	public String toDesc() {
		switch (this) {
		case SelfCheck:
			return "【自检】";
		case SetTemp:
			return "【设置目标温度】";
		case StopCtrlTemp:
			return "【停止控温】";
		case GetTemp:
			return "【返回温度】";
		case EnterVerifyTemp:
			return "【进入校温状态】";
		case VerifyTemp:
			return "【校验温度】";
		case DetectLightIntensitTemp:
			return "【检测光强】";
		case LightJustTemp:
			return "【亮度调节】";
		case OpenLight:
			return "【打开灯光】";
		case CloseLight:
			return "【关闭灯光】";
		case UpdateArm:
			return "【单片机更新】";
		case Version:
			return "【版本获取】";
		case FinishExpriment:
			return "【完成实验】";
		case AreaCalibration:
			return "【位置校准】";
		case EndAreaCalibration:
			return "【退出位置校准】";
		case RunCmd:
			return "【进入运行/溶解度命令】";
		default:
			return "【未知】";
		}
	}

	private String value;
	private int intValue;

	public int getIntValue() {
		return intValue;
	}

	public void setIntValue(int intValue) {
		this.intValue = intValue;
	}

	private CmdType(String value, int intValue) {
		this.setValue(value);
		this.setIntValue(intValue);
	}

	/**
	 * @return the value
	 */
	public String getValue() {
		return value;
	}

	/**
	 * @param value
	 *            the value to set
	 */
	public void setValue(String value) {
		this.value = value;
	}
}
